🏗️ ConstructQ · หน้าจอจัดการโครงการ
Create/Edit Project Screen Guide · v1.0
Reference: ConstructQ_CreateProject_v14.0.html
Owner: วุธ (PM/SA) · Date: 3 กรกฎาคม 2569 (2026-07-03)
Audience: Software Development Team
1. ภาพรวม (Overview)
หน้าจอ จัดการโครงการ คือหน้าที่ผู้ใช้ระดับ Project Manager (PM) หรือ Admin ใช้สำหรับสร้างและแก้ไขโครงการก่อสร้าง
โครงการ 1 โครงการเก็บข้อมูลตั้งแต่ชื่อ · ประเภท · Timeline · Sites/Zones/Floors/Rooms · สมาชิกทีม ·
ไฟล์แบบและเอกสาร · จนถึง โครงสร้างการแบ่งงาน (WBS L1→L2→L3) ที่จะถูกนำไปสร้าง Task ตรวจสอบคุณภาพ (QC)
ในภายหลัง
1.1 ผู้ที่มีสิทธิ์เข้าใช้
| บทบาท | สร้างใหม่ | แก้ไข | ลบ | ดูอย่างเดียว |
| 👤 Project Manager (PM) | ✅ โครงการที่ตนดูแล | ✅ โครงการที่ตนดูแล | — | — |
| 🛡️ Admin / Super Admin | ✅ ทุกโครงการ | ✅ ทุกโครงการ | ✅ | — |
| 👥 QC Manager (QCM) | — | — | — | ✅ (ดูโครงสร้างเพื่อ Assign) |
| 🔍 QC Inspector / Sub | — | — | — | ✅ (เฉพาะที่ได้รับมอบหมาย) |
1.2 ทางเข้าและตอนที่ทำ
- สร้างใหม่: จากหน้า
ProjectListView · กดปุ่ม "➕ สร้างโครงการใหม่" มุมขวาบน · ทำเมื่อ: ก่อนเริ่มงานก่อสร้างจริง (kick-off) · หลังเซ็นสัญญา · ก่อนเริ่ม inspection
- แก้ไข: จากการ์ดโครงการใน list · กด "✎ แก้ไข" · ทำเมื่อ: มีการเปลี่ยนแปลง scope · เพิ่ม/ลด Zone · เปลี่ยนทีม · แก้ WBS · ปรับ Timeline
2. ขั้นตอนหลัก (5 Steppers)
2ไซต์ / โซน
Sites+Zones+Floors+Rooms
4ไฟล์แบบ
Drawings·BOQ·Spec·Contract
3. กรณีที่ 1 — สร้างโครงการใหม่
3.1 Stepper 01 · ข้อมูลโครงการ
| ฟิลด์ | Type | บังคับ | หมายเหตุ |
| รหัสโครงการ | text · Auto/Manual toggle | ✅ | Auto = ระบบสร้าง PRJ-YYYY-NNN · Manual = user กรอกเอง (unique) |
| ชื่อโครงการ | text | ✅ | ไม่ซ้ำใน organization |
| ประเภทโครงการ | dropdown 9 ตัวเลือก | ✅ | อาคารสำนักงาน · พักอาศัย · โครงสร้างพื้นฐาน · Renovation · โรงงาน · ดาต้าเซ็นเตอร์ · Solar · EV Charging · โรงพยาบาล |
| เจ้าของโครงการ / ลูกค้า | text | ✅ | ชื่อเจ้าของหรือชื่อบริษัทลูกค้า |
| มูลค่าโครงการ | number · THB | — | แสดง compact (1.5 พันล้าน · 45 ล้าน) ใน Dashboard |
| ระยะเวลาโครงการ | date range (Start → End) | ✅ | ระบบคำนวณ duration อัตโนมัติ · แสดง "XXX วัน (Y.Y เดือน)" |
| รายละเอียดโครงการ | textarea | — | ระบุขอบเขต · เนื้องาน · ข้อพิเศษ |
| รูปประจำโครงการ | image upload | — | ใช้แสดงบน card ใน list |
3.2 Stepper 02 · ไซต์ / โซน
โครงการ 1 โครงการมีได้ หลายไซต์ (Site) · แต่ละไซต์มีได้ หลายโซน (Zone) · แต่ละโซนมีได้ หลายชั้น (Floor) · แต่ละชั้นมีได้ หลายห้อง (Room)
📐 โครงสร้าง Site → Zone → Floor → Room
Site (เช่น "อาคาร A") → รหัส · ชื่อ · ที่อยู่ (ตำบล/อำเภอ/จังหวัด — autocomplete)
↳ Zone (เช่น "ล็อบบี้" · "โซน North") → รหัส · ชื่อ · พื้นที่ (ตร.ม.)
↳ Floor (เช่น "ชั้น 1" · "ชั้น 5") → รหัส · ชื่อ
↳ Room (เช่น "R-101" · "Office A") → รหัส · ชื่อ · ประเภท
Summary ที่ระบบคำนวณอัตโนมัติ: N ไซต์ · M โซน · P ชั้น · Q ห้อง · แสดงบนหน้า Review และ Dashboard
3.3 Stepper 03 · สมาชิก (Members)
เพิ่มสมาชิกในโครงการพร้อมบทบาท · ระบบจะส่งงาน QC ตามสายงาน · บทบาทที่มี:
- ผู้จัดการโครงการ (Project Manager)
- ผู้จัดการตรวจสอบคุณภาพงาน (QC Manager)
- ผู้ตรวจสอบคุณภาพงาน (QC Inspector)
- ผู้แก้ไขงาน (Sub Contractor / Field)
- ผู้บริหาร (Executive)
สมาชิกเลือกจาก dropdown ที่ pre-loaded จาก User Management · ต้องระบุอย่างน้อย 1 QC Manager + 1 QC Inspector
3.4 Stepper 04 · ไฟล์แบบโครงการ
แนบเอกสารที่ QC ต้องใช้ในการตรวจสอบ · ประเภทที่รองรับ:
| ประเภท | ตัวอย่าง | Format |
| Drawing | Architectural · Structural · MEP · Shop Drawing | PDF · DWG |
| Specification | Material spec · Standard spec | PDF · DOCX |
| Contract | สัญญาก่อสร้าง · Change Order | PDF |
| BOQ | Bill of Quantities · Cost estimate | XLSX · PDF |
| Other | Method Statement · ITP · Mill Certificate | — |
แต่ละไฟล์ระบุ: ชื่อไฟล์ · ประเภท · เวอร์ชัน · ผู้อัปโหลด (เลือกจากสมาชิกที่เพิ่มใน Stepper 03)
3.5 Stepper 05 · โครงสร้างการแบ่งงาน (WBS) — จุดสำคัญที่สุด
WBS คือหัวใจของระบบ — ระบุลำดับชั้นงาน L1 → L2 → L3 ที่จะถูกนำไปสร้าง Task inspection ในภายหลัง
3.5.1 หน้า Chooser — เลือกวิธีสร้าง WBS (3 โหมด)
⭐ แนะนำ
📋
ใช้เทมเพลทมาตรฐาน
8 เทมเพลทมาตรฐาน · Hold/Witness + Ref Std พร้อมใช้
➕
กรอกเอง
สร้าง WBS จากศูนย์ทีละบรรทัด · เหมาะกับโครงการเฉพาะ
📥
นำเข้าจาก Excel
อัปโหลด .xlsx ที่มีคอลัมน์ WBS-L1, WBS-L2, WBS-L3
3.5.2 กรณี 1.1 · สร้างจากเทมเพลทโครงการ (Template Mode)
ระบบมี 8 เทมเพลท WBS มาตรฐาน · แต่ละเทมเพลทมี tag ประเภทโครงการที่เหมาะสม · ระบบจะ แนะนำ (recommended) เทมเพลทที่ตรงกับ project type ที่ PM เลือกใน Stepper 01
- กด "ใช้เทมเพลทมาตรฐาน" · เข้าหน้า picker
- ดู 8 template cards — แต่ละใบแสดง icon · ชื่อ · version · จำนวน L3 · จำนวน HOLD · WITNESS points
- เทมเพลทที่ตรงกับ project type จะมี badge "⭐ แนะนำสำหรับโครงการนี้"
- คลิกเลือก template ที่ต้องการ · ระบบเรียก
applyTemplateToForm()
- WBS ถูก pre-fill ·
form.wbsSource = {mode: 'template', templateId, version}
- สลับเป็น Active view — แสดง WBS tree ที่ pre-filled แล้ว
- Template mode (v8.0): ซ่อนฟิลด์ระดับ project-instance (Owner/Site/Zone/Dates/Status) ใน L3 · เพราะเทมเพลทเป็น "structure" เท่านั้น · ฟิลด์เหล่านี้จะกรอกใน Project WBS screen ภายหลัง
- PM สามารถ แก้ไข L1/L2/L3 name + Ref Std/Risk/HW dropdowns (v12.0) เพื่อ customize
- ปุ่ม "เปลี่ยน Template" โผล่ตอนสร้างใหม่ (v10.0) · ถ้ากดจะเจอ Confirm popup กันข้อมูลสูญ
3.5.3 กรณี 1.2 · สร้างเอง (Manual Mode)
เหมาะกับโครงการเฉพาะที่ไม่ตรงกับเทมเพลทมาตรฐาน · ผู้ใช้สร้าง WBS ทีละบรรทัด
1
เพิ่ม L1 (หมวดใหญ่)
กด "➕ กรอกเอง" · ระบบสร้าง L1 row ว่างให้ทันที · ระบุรหัส (เช่น 1, 2, 3) และชื่อ (เช่น "งานโครงสร้าง", "งาน MEP")
2
เพิ่ม L2 (หมวดย่อยภายใต้ L1)
กด "+ เพิ่ม L2" ที่แถว L1 · ระบบ generate 1.1 · ระบุชื่อ (เช่น "งานฐานราก")
3
เพิ่ม L3 (Activity ที่จะกลายเป็น Task)
กด "+ เพิ่ม L3" ที่แถว L2 · ระบบ generate 1.1.1 · ระบุ:
- ชื่อ Activity (เช่น "ตอกเสาเข็ม", "เทคอนกรีต")
- Ref Std (dropdown v11.0): มยผ. 1101-64 · วสท. 3001-56 · ASHRAE · etc.
- Risk: H (High) · M (Medium) · L (Low)
- Hold/Witness: HOLD · WITNESS · —
- (หลังโครงการสร้างเสร็จ · ในหน้า Project WBS จะกรอก): Owner · Site · Zone · Start · End · Status
4
ทำซ้ำ · Expand / Collapse
ทำซ้ำขั้น 1-3 จนได้โครงสร้างครบ · ใช้ปุ่ม Expand/Collapse All เพื่อดูภาพรวม · Filter chips: All · Hold · Witness · by Site
5
Bulk Assign (ทางเลือก)
ถ้ามีสมาชิกใน Stepper 03 แล้ว · ระบบมีปุ่ม Bulk Assign สำหรับกำหนด Owner ให้ L3 หลายแถวพร้อมกัน (default = คนแรกใน members)
3.5.4 โหมด Import จาก Excel
- กด "นำเข้าจาก Excel" · ระบบเปิด file picker
- อัปโหลด .xlsx ที่มี column:
WBS-L1 · WBS-L2 · WBS-L3 · ชื่อ · Ref Std · Risk · HW
- ระบบเรียก
importWbsFromFile() · parse · validate · เติมข้อมูลเข้า form.wbs[]
- สลับเป็น Active view · PM สามารถแก้ไขต่อได้เหมือน manual mode
3.6 การ Save + Confirm Popup (v14.0)
เมื่อกด "สร้างโครงการ" ที่ปุ่ม primary · ระบบเปิด Confirm Popup แสดงสรุป:
- ชื่อโครงการ · ประเภท · Timeline
- สถิติ: N ไซต์ · M โซน · K สมาชิก · P ไฟล์ · Q WBS L3 activities
- ปุ่ม "ยกเลิก" (ghost) · "✓ ยืนยันสร้างโครงการ" (teal filled)
4. กรณีที่ 2 — แก้ไขข้อมูลโครงการ
กดปุ่ม "✎ แก้ไข" บนการ์ดโครงการในหน้า List · ระบบเปิด CreateProject screen ในโหมด edit-existing
4.1 ความแตกต่างจากโหมด "สร้างใหม่"
| ฟีเจอร์ | สร้างใหม่ | แก้ไข |
| Title | "สร้างโครงการใหม่" | "แก้ไขโครงการ · {name}" |
| Back icon | วงกลม (v13.0) | วงกลม (v13.0) |
| Stepper 01-04 | ว่างเปล่า | Pre-filled ค่าเดิม · แก้ไขได้ทุกฟิลด์ |
| Stepper 05 · WBS · โหมด | Chooser 3 modes ปรากฏ | ข้ามไป Active view ทันที (WBS มีอยู่แล้ว) |
| Stepper 05 · ปุ่ม "เปลี่ยน Template" | โผล่ (ถ้ามี WBS แล้ว) | ซ่อน (v10.0) · กันข้อมูลสูญ · ต้องใช้ WBS Reset wizard แยก (roadmap) |
| Stepper 05 · project-instance fields | ซ่อน (template mode) | ซ่อน (v9.0 · edit-existing mode) |
| Save button | "✓ สร้างโครงการ" | "💾 บันทึกการแก้ไข" |
| Save confirm popup | Summary + Create | Diff summary + Confirm |
4.2 ขั้นตอนการแก้ไข
- เข้าหน้า Project List · หา project card ที่ต้องการแก้
- กด "✎ แก้ไข" · เปิด Create/Edit screen · form.wbsSource.mode ถูกตั้งเป็น
'existing-template' โดยอัตโนมัติ
- Nav ผ่าน 5 Stepper · แก้ไขข้อมูลที่จำเป็น (Zone เพิ่ม/ลด · Members สลับ · Files อัปเดต · WBS ปรับ)
- สำหรับ Stepper 05 (WBS) · ห้ามเปลี่ยน template · ทำได้แค่แก้ L1/L2/L3 name · Ref Std · Risk · HW · หรือเพิ่มแถวใหม่
- กด "💾 บันทึกการแก้ไข" · Confirm popup แสดงสรุปการเปลี่ยนแปลง · กด "ยืนยัน" → บันทึก + notify
⚠️ ข้อควรระวังในการแก้ไข
- ลด L3 activities ที่ถูกใช้สร้าง Task แล้ว → ระบบเตือน (Task ที่ผูกจะถูก orphan)
- เปลี่ยนชื่อ Zone/Site → ต้อง cascade update ใน Task ที่ผูก · notification ให้ Inspector
- ลด Members ที่มี Task active → เตือน · ต้อง reassign ก่อน
- เปลี่ยน Timeline · Start/End → cascade อัพเดต default range ใน Bulk Create Task
- Change Template ไม่รองรับใน edit mode (v10.0) · เพื่อกันข้อมูล WBS + Task history หาย
5. State ที่เกี่ยวข้อง
| State | ค่า | ใช้ตอนไหน |
mode | 'chooser' · 'template' · 'active' · 'import' | WBS view mode |
form.wbsSource.mode | 'template' · 'existing-template' · 'manual' · 'import' | Track WBS origin · ควบคุมการซ่อนฟิลด์ |
form.wbs[] | Array of L1/L2/L3 rows | Full WBS tree |
form.sites[] | Array of {code, name, address, zones[{code, name, area, floors[{code, name, rooms[]}]}]} | Sites+Zones+Floors+Rooms nested |
form.members[] | Array of {name, email, role, phone} | Team roster |
form.files[] | Array of {fileName, fileType, version, uploadBy} | Attachments |
6. สำหรับทีมพัฒนา
💡 Key Takeaways
- Data model: 1 project มี Sites (1:N) → Zones (1:N) → Floors (1:N) → Rooms (1:N) · แยกจาก WBS (project 1:N wbs_items where k IN [L1,L2,L3])
- WBS 3 modes: template · manual · import — ทุกโหมดจบที่
form.wbs[] เดียวกัน · differ แค่ที่มาของข้อมูล (wbsSource)
- Template mode เก็บ project-instance fields ไว้ให้ Project WBS screen ภายหลัง (ไม่รวมใน Stepper 05)
- Confirm popup ทุกจุดสำคัญ: Save/Create · Change Template · Delete · Reset — กัน user บันทึกผิด
- Idempotent: ระบบใช้ upsert (INSERT ... ON CONFLICT) เมื่อ save · re-save = update · ห้าม duplicate
- Audit trail: ทุกการเปลี่ยนแปลงต้อง log · โดยเฉพาะเปลี่ยน Timeline · Members · WBS structure (ตาราง `project_audit`)
- Concurrency: 2 PM แก้พร้อมกัน → optimistic lock ผ่าน
updated_at · ถ้า conflict = แสดง diff + let user resolve
- API endpoints: POST /projects · PUT /projects/:id · GET /projects/:id/full · GET /projects/:id/wbs · POST /projects/:id/wbs/apply-template
⚠️ Edge Cases
- Import Excel ที่คอลัมน์ไม่ตรง Template → ต้อง validate + แสดง diff (คอลัมน์ที่ขาด/เกิน)
- WBS ที่มี L2 แต่ไม่มี L1 (orphan) → auto-heal หรือ block save
- Timeline Start > End → block save + inline error
- Zone code ซ้ำภายใน Site เดียวกัน → error inline
- Member ที่ email ไม่ระบุ → block save (email เป็น key สำหรับ notification)
- ไฟล์แนบขนาดใหญ่ > 50MB → block + hint ให้ compress หรือใช้ link
- Edit mode + ลด L3 ที่มี active tasks → confirm dialog + list tasks ที่จะ orphan